package com.cloud.poetry.system.demo.controller;

import com.cloud.poetry.base.entity.res.SaveFileOutParam;
import com.cloud.poetry.core.constant.PoetryConstant;
import com.cloud.poetry.core.util.CommonUtil;
import com.cloud.poetry.system.demo.entity.DemoUploadFile;
import com.cloud.poetry.system.demo.service.DemoService;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 此类是测试demo
 * @author mengxj
 */
@RestController
@RequestMapping("demo")
@AllArgsConstructor
public class DemoController {

    private DemoService demoService;

    /**
     * 多数据源用法示例
     * 取消/使用 自动封装结果示例
     * @param type 数据源，值是1或2
     * @param box 是否封装通用结果，1否
     * @return 结果
     */
    @GetMapping("tables/{type}/{box}")
    public List<Map<String, String>> tables(@PathVariable("type") int type, @PathVariable("box") int box){
        if(box == 1){
            CommonUtil.getRequest().removeAttribute(PoetryConstant.HANDLE_RESPONSE_KEY);
        }
        Map<String, String> map = new HashMap<>();
        List<String> list = this.demoService.tables(type);
        list.forEach(s -> map.put("value", s));
        return Collections.singletonList(map);
    }

    /**
     * valid配合实体类注解用法示例
     * 上传文件示例
     * feign使用示例
     * @param file 上传文件参数
     * @return 上传结果
     */
    @PostMapping("uploadFile")
    public SaveFileOutParam uploadFile(@Valid DemoUploadFile file){
        return this.demoService.uploadFile(file);
    }

    /**
     * kafka示例
     * rabbitmq示例
     * @param type 1-kafka 2-队列
     * @param queue 队列名称
     */
    @GetMapping("push/{type}/{queue}")
    public void push(@PathVariable("type") int type, @PathVariable("queue") String queue){
        this.demoService.push(type, queue);
    }
}
